home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 10
/
FM Towns Free Software Collection 10.iso
/
tos_updt
/
fmcity
/
palcom
/
auto
/
script
/
autolib.mx
< prev
next >
Wrap
Text File
|
1995-04-19
|
36KB
|
1,236 lines
//--------------------------------------------------------------------------//
// PALCOM V2.1 L10 //
// 自動通信:自動通信ライブラリスクリプト(常駐) //
// //
// CopyRight(C) 1994/10/20 //
// FUJITSU PERSONAL COMPUTER SYSTEMS LIMITED //
// written by C-cube Soft T.Nakamura //
//--------------------------------------------------------------------------//
!!MAINBLOCK
event @OPEN.EXTERN {
//--- グローバル変数定義 ---//
sys.global( $AutoSetName ); // 選択中の設定名
sys.global( $AutoSetFileName ); // 選択中の設定ファイル名
sys.global( $TrdId ); // TRD の ハンドル
sys.global( $TrdUpdateFlg ); // TRD 更新フラグ
sys.global( $SetDataList ); // 選択中の設定データ
sys.global( $ForumDataList1 ); // 編集中のフォーラムデータ
sys.global( $ForumDataList1Sub ); // 同上
sys.global( $ForumDataList2 ); // 同上
sys.global( $LogFileId ); // ログファイルID
sys.global( $LogFileName ); // ログファイル名
sys.global( $IdxFileId ); // インデックスファイル名
sys.global( $IdxUpList ); // 送信マーカリスト
sys.global( $IdxNum ); // インデックス総数
sys.global( $ErrorFlg ); // エラー発生フラグ
sys.global( $ComFlg ); // 通信実行フラグ
sys.global( $HaltFlg ); // 中断フラグ
sys.global( $HaltFlgSub ); // 中断フラグ(補助用)
sys.global( $AUTO.WAIT15 ); // 15 秒 wait キャラクタ
sys.global( $AUTO.WAIT30 ); // 30 秒 wait キャラクタ
sys.global( $AUTO.WAIT60 ); // 60 秒 wait キャラクタ
sys.global( $AutoDefaultData ); // デフォルト情報リスト
sys.global( $AutoForumMax ); // フォーラム最大登録件数
$TrdId = #FALSE;
$TrdUpdateFlg = #FALSE;
$ErrorFlg = #FALSE;
$ComFlg = #FALSE;
$HaltFlg = 0;
$HaltFlgSub = 0;
$AUTO.WAIT60 = "";
$AUTO.WAIT30 = "";
$AUTO.WAIT15 = "";
$AutoDefaultData = ["", 0];
$AutoForumMax = 0;
}
event @CLOSE.EXTERN {
if( $TrdId != #FALSE ) {
AUTO.closeDBfile();
}
//--- グローバル変数解除 ---//
sys.local( $AutoSetName );
sys.local( $AutoSetFileName );
sys.local( $TrdId );
sys.local( $TrdUpdateFlg );
sys.local( $SetDataList );
sys.local( $ForumDataList1 );
sys.local( $ForumDataList1Sub );
sys.local( $ForumDataList2 );
sys.local( $LogFileId );
sys.local( $LogFileName );
sys.local( $IdxFileId );
sys.local( $IdxUpList );
sys.local( $IdxNum );
sys.local( $ErrorFlg );
sys.local( $ComFlg );
sys.local( $HaltFlg );
sys.local( $HaltFlgSub );
sys.local( $AUTO.WAIT15 );
sys.local( $AUTO.WAIT30 );
sys.local( $AUTO.WAIT60 );
sys.local( $AutoDefaultData );
sys.local( $AutoForumMax );
}
//----------------------------//
//--- 保存データの開放 ---//
//----------------------------//
function AUTO.freeData() {
sys.free( $SetDataList );
sys.free( $ForumDataList1 );
sys.free( $ForumDataList1Sub );
sys.free( $ForumDataList2 );
sys.free( $IdxUpList );
sys.free( $AUTO.WAIT15 );
sys.free( $AUTO.WAIT30 );
sys.free( $AUTO.WAIT60 );
}
//--------------------------------------------//
//--- 文字列の送信(システム変数使用) ---//
//--------------------------------------------//
function AUTO.putStr( $str ) {
//--- 中断のチェック ---//
if( com.isCD( $$COM.PORT ) == #FALSE ) {
AUTO.disconnect( #TRUE );
}
if( $HaltFlgSub != 0 ) {
AUTO.halt();
}
com.putString( $str, [] );
}
//----------------------------------------------------//
//--- 文字列の送信(エコーバックチェック付き) ---//
//----------------------------------------------------//
function AUTO.putStr2( $str ) {
//--- 中断のチェック ---//
if( com.isCD( $$COM.PORT ) == #FALSE ) {
AUTO.disconnect( #TRUE );
}
if( $HaltFlgSub != 0 ) {
AUTO.halt();
}
//--- 文字列の終端が '\r' の場合だけエコーバックのチェックを行う ---//
if( str.right( $str, 1, ) != "\r" ) {
com.putString( $str, [] );
$st = 0;
} else {
loop {
$flg = sys.intRec?();
sys.stopIntRec();
com.putString( $str, [] );
$ecStr = str.replaceAll( $str, "\r", "\n" );
$ecStr = str.replaceAll( $str, "%", "%%" );
comtable( $a, 600 ) {
$ecStr { $st = 0; exit; }
">\w\w" { $st = 1; exit; }
">\w\w" { $st = 1; exit; }
":\w\w" { $st = 1; exit; }
":\w\w" { $st = 1; exit; }
timeout { $st = 2; exit; }
interval { AUTO.haltCheck(); }
$AUTO.WAIT30 { com.putString("\r", [] ); }
}
if( $st == 1 ) {
continue;
}
if( $flg == #TRUE ) {
sys.startIntRec();
}
exit;
}
}
if( $st == 2 ) {
return( #FALSE );
}
return( #TRUE );
}
//----------------------------------//
//--- 中断フラグの設定&獲得 ---//
//----------------------------------//
function AUTO.setHaltFlg( $flg ) {
if( $flg == 0 ) {
$HaltFlgSub = 0;
}
$HaltFlg = $flg;
return;
}
function AUTO.getHaltFlg() {
return( $HaltFlg );
}
function AUTO.getHaltFlgSub() {
return( $HaltFlgSub );
}
//--------------------------------//
//--- 中断のチェック&実行 ---//
//--------------------------------//
function AUTO.haltCheck() {
if( com.isCD( $$COM.PORT ) == #FALSE ) {
AUTO.disconnect( #TRUE );
}
if( $HaltFlgSub != 0 ) {
AUTO.halt();
}
return;
}
//----------------------------------------//
//--- 中断準備処理イベントハンドラ ---//
//----------------------------------------//
event @AUTO.HALT {
dialog.openProg(["━━━━━ 自動通信の中断 ━━━━━",
"",
" 少 々 お 待 ち く だ さ い ",
""], "", #FALSE );
$HaltFlgSub = 1;
return;
}
//--------------------//
//--- 中断処理 ---//
//--------------------//
function AUTO.halt() {
dialog.close();
sys.pushCursor( 80 );
$ret = dialog.ask(["━━━━━━━ 自動通信の中断 ━━━━━━━",
"",
" 自 動 通 信 を 中 断 し ま す。 ",
""],["取消","回線を切断する","通信を続ける"] );
sys.popCursor();
if( $ret == 0 ) { // 取消(自動通信続行)
sys.pushCursor( 80 );
dialog.openProg([[]," 自 動 通 信 実 行 中 ",[]],
" 中断 ", #FALSE );
$HaltFlgSub = 0;
sys.enableInt("AUTO.interruptFunc");
return;
} elif( $ret == 1 ) { // 回線切断
$HaltFlg = 1;
} else { // 通信続行
$HaltFlg = 2;
}
sys.deleteInt("AUTO.interruptFunc");
sys.pushCursor( 81 );
dialog.openProg(["━━━━ 自動通信の中断 ━━━━",
"",
" 中 断 処 理 中 ", ""], "", #FALSE );
com.sendBreak( 0 );
$HaltFlgSub = 0;
halt;
}
//--------------------------------------//
//--- 回線が切断された場合の処理 ---//
//--------------------------------------//
function AUTO.disconnect(
$haltFlg ) // 強制終了フラグ(#TRUE:する)
{
sys.deleteInt("AUTO.interruptFunc");
if( dialog.check() == #TRUE ) {
dialog.close();
}
$saveXsize = dialog.getDefaultXSize();
dialog.setDefaultXSize( 266 );
$ret = dialog.ask(["━━━━━━━ 自動通信 ━━━━━━━",
"",
" 通信中に回線が切断されました。 ",
""],["確認"] );
dialog.setDefaultXSize( $saveXsize );
$HaltFlg = 1;
if( $haltFlg == #TRUE ) {
halt;
}
}
//--------------------------------//
//--- 通信実行フラグの設定 ---//
//--------------------------------//
function AUTO.setComFlg( $ComFlg ) {
return;
}
//------------------------------------//
//--- エラーフラグの設定/取得 ---//
//------------------------------------//
function AUTO.setErrorFlg( $ErrorFlg ) {
return;
}
function AUTO.getErrorFlg() {
return( $ErrorFlg );
}
//----------------------------------------//
//--- データベースファイル名の取得 ---//
//----------------------------------------//
function AUTO.getDBfileName()
{
if( str.right( $$DIR.LOG, 1 ) != "\\" ) {
$file = str.join([$$DIR.LOG, "\\HOSTNIF.TRD"], "" );
} else {
$file = str.join([$$DIR.LOG, "HOSTNIF.TRD"], "" );
}
return( $file );
}
//----------------------------------------------------//
//--- データベ-スファイルのオ-プン/クローズ ---//
//----------------------------------------------------//
function AUTO.openDBfile()
{
$file = AUTO.getDBfileName();
if( file.exist( $file ) == #TRUE ) {
$line = file.getLineNum( $file );
$TrdId = trd.init(( $line + 10 ) * 20, -1 );
trd.load( $TrdId, $file );
$cnt = trd.count( $TrdId, [1, 2, -5, -2] ) + 50;
trd.end( $TrdId ); // 現在のフォーラム数 + 50件
$buffSize = ( $cnt * 50 * 20 ) + ( 776 * 20 );
$AutoForumMax = $cnt;
} else {
$buffSize = 65520; // フォーラム50件分 (50 * 50 * 20) + (776 * 20)
$AutoForumMax = 50;
}
$TrdId = trd.init( $buffSize, -1 );
if( file.exist( $file ) == #TRUE ) {
trd.load( $TrdId, $file );
return;
}
//--- データベースファイルが無い場合、新規に作成する ---//
$tag = [1,-2];
trd.setData( $TrdId, $tag, "NIF\tNIFTY-Serve" );
$tag = [1,1];
trd.setData( $TrdId, $tag, "設定なし");
$tag = [1,2];
trd.setData( $TrdId, $tag, "設定なし");
$tag = [1,3];
trd.setData( $TrdId, $tag, "");
$tag = [1,1,-2];
trd.setData( $TrdId, $tag, "MAIL\t電子メール" );
$tag = [1,1,1];
trd.setData( $TrdId, $tag, "1\t受信" );
$tag = [1,1,2];
trd.setData( $TrdId, $tag, "2\t送信" );
$tag = [1,1,3];
trd.setData( $TrdId, $tag, "3\tアップロード" );
$tag = [1,1,4];
trd.setData( $TrdId, $tag, "4\tダウンロード" );
$tag = [1,2,-2];
trd.setData( $TrdId, $tag, "FORUM\tフォーラム" );
$tag = [1,3,-2];
trd.setData( $TrdId, $tag, "HP\tホームパーティ" );
trd.save( $TrdId, $file );
return;
}
function AUTO.closeDBfile() {
if( $TrdUpdateFlg == #TRUE ) {
dialog.openProg([[]," NIFTY-Serve 情報を更新中です。 ",[]],
"", #FALSE );
$file = AUTO.getDBfileName();
trd.save( $TrdId, $file );
dialog.close();
}
trd.end( $TrdId );
$TrdId = #FALSE;
$TrdUpdateFlg = #FALSE;
}
function AUTO.getTrdId() {
return( $TrdId );
}
function AUTO.setTrdUpdateFlg() {
$TrdUpdateFlg = #TRUE;
return;
}
//--------------------------------------------------------//
//--- 選択された設定名/設定ファイル名の設定/獲得 ---//
//--------------------------------------------------------//
function AUTO.setSetName( $AutoSetName, $AutoSetFileName ) {
return;
}
function AUTO.getSetName() {
return( [$AutoSetName, $AutoSetFileName] );
}
//--------------------------------//
//--- 設定情報の獲得/設定 ---//
//--------------------------------//
function AUTO.getSetData() {
return( $SetDataList );
}
function AUTO.setSetData( $SetDataList ) {
return;
}
//----------------------------------//
//--- ルート情報の獲得/設定 ---//
//----------------------------------//
function AUTO.getAutoData() {
return( data.copy( list.get1st( $SetDataList )));
}
function AUTO.setAutoData( $list ) {
$cpList = data.copy( $list );
list.del1st( $SetDataList );
list.put1st( $SetDataList, $cpList );
}
//----------------------------------//
//--- 掲示板情報の獲得/設定 ---//
//----------------------------------//
function AUTO.getBbsData() {
return( data.copy( list.getNth( $SetDataList, 5 )));
}
function AUTO.setBbsData( $list ) {
$cpList = data.copy( $list );
list.delNth( $SetDataList, 5 );
list.putNth( $SetDataList, 4, $cpList );
}
//--------------------------------------//
//--- フォーラム情報の編集&設定 ---//
//--------------------------------------//
function AUTO.setForumData(
$list, // フォーラムデータリスト
$chkNum ) // フォーラムチェックデータ
{
$listSub = data.copy( $list );
$forumId = list.getNth( list.getNth( $listSub, 3 ), 3 );
if( list.getNth( $listSub, 4 ) == #TRUE ) {
//--- 既に設定データがある場合 ---//
$i = 1;
foreach( $a, list.getNth( $SetDataList, 2 )) {
$id = list.getNth( list.get1st( $a ), 3 );
if( $id == $forumId ) {
$ForumDataList1 = list.putLast( $listSub, $i );
$ForumDataList2 = data.copy( list.getNth( $a, 2 ));
list.del1st( list.get1st( list.get1st( $ForumDataList2 )));
list.put1st( list.get1st( list.get1st( $ForumDataList2 )),
list.getNth( $list, 5 ));
exit;
}
$i = $i + 1;
}
} else {
//--- 新規の設定データの場合 ---//
$ForumDataList1 = $listSub;
$ForumDataList2 = [[[list.getNth( $list, 5 )],[#FALSE,""],
[#FALSE,#FALSE,#FALSE],[#FALSE],[#FALSE,#FALSE]],
[[#FALSE,0],[],[]],
[[1,9],[],[]],
$chkNum,
];
}
return;
}
function AUTO.setLoopStatus( $statusList, $tagList ) {
foreach( $a, list.getNth( $SetDataList, 2 )) {
$forumId = list.getNth( list.get1st( $a ), 3 );
$srhFlg = 0;
$i = 1;
foreach( $b, $tagList ) {
if( $forumId == list.getLast( $b )) {
$srhFlg = 1;
exit;
}
$i = $i + 1;
}
if( $srhFlg == 0 ) {
continue;
}
$list = list.get1st( list.get1st( list.getNth( $a, 2 )));
if( list.get1st( $list ) != list.getNth( $statusList, $i )) {
list.del1st( $list );
list.putLast( $list, list.getNth( $statusList, $i ));
}
}
}
function AUTO.updateForumData( $dataList, $no ) {
$forumName = list.getNth( $ForumDataList1Sub, 1 );
$cmdName = list.getNth( $ForumDataList1Sub, 2 );
//--- フォーラム名またはコマンド名が変更されている場合 ---//
//--- TRDのデータを書き換える ---//
if(( $forumName != list.getNth( $ForumDataList1, 1 ))||
( $cmdName != list.getNth( $ForumDataList1, 2 ))) {
if( $no == -1 ) {
//--- 新規の場合 ---//
$ret = trd.getData( $TrdId, [1, 4] );
$newMode = list.getNth( $ret, 1 );
$newNo = data.toNumber( list.getNth( $ret, 2 ));
if(( $newMode != -1 )||( $newNo == -1 )) {
if( $newNo == -1 ) {
$newMode = 1;
}
//--- 使用されていないIDを捜し出す ---//
$i = 1;
loop {
$ret = trd.checkList( $TrdId, [1,2,$i,-2,0] );
if( list.get1st( $ret ) == 0 ) {
$newNo = $i;
exit;
}
$i = $i + 1;
}
}
//--- 新規にグループを作成する ---//
$tag = [1, 2, $newNo];
list.delNth( $ForumDataList1, 3 );
list.putNth( $ForumDataList1, 2, $tag );
$tagSub = data.copy( $tag );
list.putLast( $tagSub, -2 );
$str = str.join( [list.getNth( $ForumDataList1Sub, 2 ),
"\t",
list.getNth( $ForumDataList1Sub, 1 ),
"\t",
data.toString(list.getNth($ForumDataList2, 4))],
"" );
trd.setData( $TrdId, $tagSub, $str );
$tagSub = data.copy( $tag );
list.putLast( $tagSub, 1 );
trd.setData( $TrdId, $tagSub, "ANN\tお知らせ" );
$tagSub = data.copy( $tag );
list.putLast( $tagSub, 2 );
trd.setData( $TrdId, $tagSub, "BUL\t掲示板" );
$tagSub = data.copy( $tag );
list.putLast( $tagSub, 3 );
list.putLast( $tagSub, -2 );
trd.setData( $TrdId, $tagSub, "MES\t電子会議室" );
$tagSub = data.copy( $tag );
list.putLast( $tagSub, 4 );
list.putLast( $tagSub, -2 );
trd.setData( $TrdId, $tagSub, "LIB\tデータライブラリ" );
//--- 次回作成グループ番号の記録 ---//
if( $newMode != 1 ) {
if( $newNo == 65535 ) {
$newNo = -2;
}
trd.setData( $TrdId, [1, 4], data.toString( $newNo + 1 ));
}
AUTO.setTrdUpdateFlg();
} else {
$tag = data.copy( list.getNth( $ForumDataList1, 3 ));
$tagSub = data.copy( $tag );
list.putLast( $tagSub, -2 );
list.putLast( $tagSub, 0 );
$str = str.join( [list.getNth( $ForumDataList1Sub, 2 ),
"\t",
list.getNth( $ForumDataList1Sub, 1 ),
"\t",
data.toString(list.getNth( $ForumDataList2,4 ))],
"" );
trd.setData( $TrdId, $tagSub, $str );
AUTO.setTrdUpdateFlg();
}
}
//--- 内部保存デ-タの更新 ---//
$forumList = list.getNth( $SetDataList, 2 );
if( list.getNth( $ForumDataList1, 4 ) == #FALSE ) {
$list = [list.getNth( $ForumDataList1, 3 ),$ForumDataList2];
list.putLast( $forumList, $list );
} else {
$forumList = list.getNth( $forumList,list.getNth($ForumDataList1,6));
list.delNth( $forumList, 2 );
list.putNth( $forumList, 1, $ForumDataList2 );
}
$i = 1;
foreach( $a, $dataList ) {
table( $i ) {
1 { $data = #TRUE; }
2 { $data = list.get1st( list.get1st(
list.get1st( $ForumDataList2 ))); }
3 { $data = list.get1st( $ForumDataList1Sub ); }
4 { $data = list.getNth( $ForumDataList1Sub, 2 ); }
5 { $data = data.copy( list.getNth( $ForumDataList1, 3 )); }
6 { $data = list.getNth( $ForumDataList2, 4 ); }
}
if( $no == -1 ) {
list.putLast( $a, $data );
} else {
list.delNth( $a, $no );
list.putNth( $a, $no - 1, $data );
}
$i = $i + 1;
}
return;
}
//----------------------------------//
//--- フォーラムデータの削除 ---//
//----------------------------------//
function AUTO.delForumData(
$tag, // 削除対象のフォーラムのタグ
$delFlg ) // データベース項目削除フラグ
// #TRUE : 削除する
{ // #FALSE : 削除しない
$forumId = list.getNth( $tag, 3 );
$i = 1;
foreach( $a, list.getNth( $SetDataList, 2 )) {
if( $forumId == list.getNth( list.get1st( $a ), 3 )) {
list.delNth( list.getNth( $SetDataList, 2 ), $i );
exit;
}
$i = $i + 1;
}
if( $delFlg == #TRUE ) {
trd.delData( $TrdId, list.putLast( data.copy( $tag ), -2 ));
$TrdUpdateFlg = #TRUE;
}
return;
}
//--------------------------------------------//
//--- フォーラム情報の取得&設定その1 ---//
//--------------------------------------------//
function AUTO.getForumData1() {
return( data.copy( $ForumDataList1 ));
}
function AUTO.setForumData1( $list ) {
$ForumDataList1Sub = data.copy( $list );
return;
}
//--------------------------------------------//
//--- フォーラム情報の取得&設定その2 ---//
//--------------------------------------------//
function AUTO.getForumData2() {
return( data.copy( list.get1st( $ForumDataList2 )));
}
function AUTO.setForumData2( $list ) {
list.del1st( $ForumDataList2 );
list.put1st( $ForumDataList2, data.copy( $list ));
return;
}
//--------------------------------------//
//--- 巡回会議室情報の獲得&設定 ---//
//--------------------------------------//
function AUTO.getKaigiData() {
return( data.copy( list.getNth( $ForumDataList2, 2 )));
}
function AUTO.setKaigiData( $list ) {
list.delNth( $ForumDataList2, 2 );
list.putNth( $ForumDataList2, 1, data.copy( $list ));
return;
}
//------------------------------------------------//
//--- 巡回データライブラリ情報の獲得&設定 ---//
//------------------------------------------------//
function AUTO.getLibData() {
return( data.copy( list.getNth( $ForumDataList2, 3 )));
}
function AUTO.setLibData( $list ) {
list.delNth( $ForumDataList2, 3 );
list.putNth( $ForumDataList2, 2, data.copy( $list ));
return;
}
//--------------------------------//
//--- HP一覧リストの取得 ---//
//--------------------------------//
function AUTO.getHPlist() {
$nameList = [];
$statusList = [];
$idList = [];
$pwList = [];
$chkList = [];
$tagList = [];
$tag = [1,3,-6];
loop {
$retList = trd.getData( $TrdId, $tag );
if( list.get1st( $retList ) != -1 ) {
exit;
}
$list = str.split( list.getNth( $retList, 2 ), "\t" );
list.putLast( $nameList, list.get1st( $list ));
if( list.size( $list ) == 2 ) {
list.putLast( $chkList, list.getNth( $list, 2 ));
list.putLast( $idList, "" );
list.putLast( $pwList, "" );
} else {
list.putLast( $idList, list.getNth( $list, 2 ));
list.putLast( $pwList, list.getNth( $list, 3 ));
list.putLast( $chkList, list.getNth( $list, 4 ));
}
list.putLast( $tagList, [1,3,list.getNth( list.getLast($retList),3 )]);
list.putLast( $statusList, #FALSE );
$tag = [];
}
return([$nameList, $statusList, $idList, $pwList, $chkList, $tagList]);
}
//------------------------------------//
//--- 巡回HP情報の獲得&設定 ---//
//------------------------------------//
function AUTO.getHpData() {
$hpList = AUTO.getHPlist();
$nameList = list.getNth( $hpList, 1 );
$statusList = list.getNth( $hpList, 2 );
$idList = list.getNth( $hpList, 3 );
$pwList = list.getNth( $hpList, 4 );
$chkList = list.getNth( $hpList, 5 );
$tagList = list.getNth( $hpList, 6 );
$hpList = list.getNth( $SetDataList, 3 );
//--- データベースとの連携を取る ---//
foreach( $list, $hpList ) {
$tagNo = list.getNth( list.get1st( $list ), 3 );
$i = 1;
foreach( $wkList, $tagList ) {
if( list.getNth( $wkList, 3 ) == $tagNo ) {
exit;
}
$i = $i + 1;
}
if( $i > list.size( $nameList )) {
continue;
}
$check = list.getNth( $chkList, $i );
if( $check != list.getNth( $list, 2 )) {
continue;
}
list.delNth( $statusList, $i );
list.putNth( $statusList, $i - 1, #TRUE );
}
return( [$nameList, $statusList, $idList, $pwList, $chkList, $tagList] );
}
function AUTO.setHpData( $list ) {
$nameList = list.getNth( $list, 1 );
$statusList = list.getNth( $list, 2 );
$idList = list.getNth( $list, 3 );
$pwList = list.getNth( $list, 4 );
$chkList = list.getNth( $list, 5 );
$tagList = list.getNth( $list, 6 );
//--- 巡回するものだけ取り出してリストに設定する ---//
$i = 1;
$hpList = [];
foreach( $status, $statusList ) {
if( $status == #TRUE ) {
$tag = data.copy( list.getNth( $tagList, $i ));
$wkList = [$tag, list.getNth( $chkList, $i )];
list.putLast( $hpList, $wkList );
}
$i = $i + 1;
}
list.delNth( $SetDataList, 3 );
list.putNth( $SetDataList, 2, $hpList );
return;
}
//--------------------------------------//
//--- 指定ダウンロード情報の獲得 ---//
//--------------------------------------//
function AUTO.getDownData() {
$list = list.getNth( $SetDataList, 4 );
$retList = [];
foreach( $a, $list ) {
$wkList = str.split( list.getNth( $a, 2 ), "\t" );
$wkList2 = str.split( list.getNth( $wkList, 1 ), "," );
if( list.get1st( $wkList2 ) == "1" ) { // 既にダウンロード済
continue;
}
//--- データを加工する ---//
$listSub = [0,list.get1st( $a )];
list.putLast( $listSub, data.toNumber( list.getNth( $wkList2, 2 )));
foreach( $b, str.split( list.getNth( $wkList, 2 ), "," )) {
list.putLast( $listSub, data.toNumber( $b ));
}
list.putLast( $listSub, data.toNumber( list.getNth( $wkList, 3 )));
list.putLast( $listSub, list.getNth( $a, 3 ));
list.putLast( $retList, $listSub );
}
return( $retList );
}
//------------------------------------------------------//
//--- 指定番目の内容が指定の値のリストを取り出す ---//
//------------------------------------------------------//
function AUTO.selectList( $list, $no, $num ) {
$ret = [];
foreach( $a, $list ) {
if( list.getNth( $a, $no ) == $num ) {
list.putLast( $ret, $a );
}
}
return( $ret );
}
//--------------------------------------//
//--- ダウンロードブロックの更新 ---//
//--------------------------------------//
function AUTO.updateDownData( $list ) {
$id = file.open( list.getNth( AUTO.getSetName(), 2 ), "", 1 );
foreach( $a, $list ) {
if( list.get1st( $a ) == 0 ) {
continue;
}
file.seek( $id, list.getNth( $a, 2 ), 0 );
file.putByte( $id, code("1"));
}
file.close( $id );
return;
}
//-----------------------------------------------------//
//--- コマンド待ちの状態まで待つ(more 処理有り) ---//
//-----------------------------------------------------//
function AUTO.waitPrompt( $mode ) {
if( $mode == #FALSE ) {
comtable( $a, 600 ) {
"\w\w" { exit; }
interval { AUTO.haltCheck(); }
}
return( 0 );
}
$flg = sys.intRec?();
sys.stopIntRec();
$more = 0;
$st = -1;
$er = #FALSE;
comtable( $a, 600 ) {
interval { AUTO.haltCheck(); }
timeout { $st = -1; exit; }
"続き (" { $more = 1; }
")\n" { if( $more == 1 ) { $more = 2; } }
"\n" { $more = 0; }
"more>\w\w" { AUTO.putStr("\r"); }
">\w\w" { $st = 0; exit; }
":\w\w" { $st = 1; exit; }
":\w\w" { $st = 2; exit; }
"◆\n" { $er = #TRUE; }
$AUTO.WAIT30 { AUTO.putStr("\r"); }
">\w\w" {
if( $more == 2 ) {
AUTO.putStr("\r");
$more = 0;
} else {
$st = 0;
exit;
}
}
}
if( $flg == #TRUE ) {
sys.startIntRec();
}
if( $er == #TRUE ) {
return( #FALSE );
}
return( $st );
}
//-----------------------------------------------------//
//--- コマンド待ちの状態まで待つ(more 処理無し) ---//
//-----------------------------------------------------//
function AUTO.waitPrompt2( $mode ) {
if( $mode == #FALSE ) {
comtable( $a, 600 ) {
"\w\w" { exit; }
interval { AUTO.haltCheck(); }
}
return( 0 );
}
$flg = sys.intRec?();
sys.stopIntRec();
$st = -1;
$er = #FALSE;
comtable( $a, 600 ) {
timeout { $st = -1; exit; }
">\w\w" { $st = 0; exit; }
">\w\w" { $st = 0; exit; }
":\w\w" { $st = 1; exit; }
":\w\w" { $st = 2; exit; }
"◆\n" { $er = #TRUE; }
$AUTO.WAIT30 { AUTO.putStr("\r");}
interval { AUTO.haltCheck(); }
}
if( $flg == #TRUE ) {
sys.startIntRec();
}
if( $er == #TRUE ) {
return( #FALSE );
}
return( $st );
}
//----------------------------------------------------------------------//
//--- センターにコマンドを送信し、コマンド受信待ちになるまで待つ ---//
//----------------------------------------------------------------------//
function AUTO.sendCommand( $cmd ) {
$intFlg = sys.intRec?();
sys.stopIntRec();
$str = str.join( [$cmd, "\n"], "" );
$flg = 3;
SENDLOOP:
//--- コマンドを送信し、そのエコーバックを待つ ---//
loop {
AUTO.putStr( str.join( [$cmd, "\r"], "" ));
comtable( $a, 300 ) {
$str { $flg = 0; $ret = #TRUE; exit; }
interval{ AUTO.haltCheck(); }
timeout {
AUTO.putStr("\r");
AUTO.waitPrompt( #TRUE );
$flg = $flg - 1;
$ret = #FALSE;
exit;
}
}
if( $flg == 0 ) {
exit;
}
}
//--- プロンプトを待って復帰 ---//
if( $ret == #TRUE ) {
$ret = AUTO.waitPrompt( #TRUE );
if( $ret == #FALSE ) {
//--- エラーだった場合、もう一回送信する ---//
goto SENDLOOP;
}
if( $intFlg == #TRUE ) {
sys.startIntRec();
}
}
return( $ret );
}
//--------------------------------------------//
//--- ログファイルIDの設定&取り出し ---//
//--------------------------------------------//
function AUTO.setLogFileId( $LogFileId ) {
return;
}
function AUTO.getLogFileId() {
return( $LogFileId );
}
//------------------------------------------//
//--- ログファイル名の設定&取り出し ---//
//------------------------------------------//
function AUTO.setLogFileName( $LogFileName ) {
return;
}
function AUTO.getLogFileName() {
return( $LogFileName );
}
//----------------------------------------------------//
//--- インデックスファイルIDの設定&取り出し ---//
//----------------------------------------------------//
function AUTO.setIdxFileId( $IdxFileId ) {
return;
}
function AUTO.getIdxFileId() {
return( $IdxFileId );
}
//--------------------------------------------//
//--- インデックス総数の設定&取り出し ---//
//--------------------------------------------//
function AUTO.setIdxNum( $IdxNum ) {
return;
}
function AUTO.getIdxNum() {
return( $IdxNum );
}
//--------------------------------------------------------------//
//--- インデックスファイルから送信文書のマーカを取り出す ---//
//--------------------------------------------------------------//
function AUTO.getUpListAll() {
$IdxUpList = lsi.getUploadTag( $IdxFileId );
return;
}
//----------------------------------------------------------------//
//--- インデックス内の指定番号の送信文書のマーカを取り出す ---//
//----------------------------------------------------------------//
function AUTO.getUpList( $no ) {
$ret = [];
foreach( $a, $IdxUpList ) {
if( list.get1st( list.get1st( $a )) == $no ) {
list.putLast( $ret, $a );
}
}
return( $ret );
}
//--------------------------------------------------//
//--- 送信文書リストの指定のリストの取り出し ---//
//--------------------------------------------------//
function AUTO.selectUpList(
$list, // 送信文書リスト
$no, // マーカ要素番号
$num ) // 検索値
{
$retList = [];
foreach( $a, $list ) {
if( list.getNth( list.getNth( list.get1st( $a ), 2 ), $no ) == $num ) {
list.putLast( $retList, $a );
}
}
return( $retList );
}
//--------------------------------------------------------//
//--- 指定のインデックスの送信済フラグをセットする ---//
//--------------------------------------------------------//
function AUTO.setSendFlg(
$idxList ) // インデックスリスト
{
//--- 変更対象のインデックスを読み込む ---//
lsi.seekIndex( $IdxFileId, list.getNth( $idxList, 2 ));
lsi.getIndex( $IdxFileId );
//--- 変更対象のタグをカレントにする ---//
$tagNo = list.getNth( $idxList, 3 );
$i = 1;
$j = list.getNth( $idxList, 4 );
loop {
$tagList = list.getNth( lsi.getTag( $IdxFileId, $tagNo ), 2 );
$tagNo = -2;
if( $i == $j ) {
exit;
}
$i =$i + 1;
}
//--- タグの制御情報を更新する ---//
if( list.getNth( $idxList, 3 ) == 0x203 ) {
$ctrl = list.getNth( $tagList, 2 );
$ctrl = $ctrl | 0x0200;
list.delNth( $tagList, 2 );
list.putNth( $tagList, 1, $ctrl );
} else {
$ctrl = list.getNth( $tagList, 1 );
$ctrl = $ctrl | 0x0200;
list.delNth( $tagList, 1 );
list.putNth( $tagList, 0, $ctrl );
}
lsi.updateTag( $IdxFileId, -1, $tagList );
//--- インデックスを更新する ---//
lsi.updateIndex( $IdxFileId, list.getNth( $idxList, 2 ));
return;
}
//------------------------------//
//--- インデックスの追加 ---//
//------------------------------//
function AUTO.writeIdx( $tagList )
{
//--- タグの設定 ---//
lsi.clearTag( $IdxFileId );
foreach( $list, $tagList ) {
lsi.createTag( $IdxFileId,list.get1st( $list ),list.getNth( $list,2 ));
}
//--- インデックス追加 ---//
lsi.appendIndex( $IdxFileId );
$IdxNum = $IdxNum + 1;
return;
}
//----------------------------//
//--- エラー情報の記録 ---//
//----------------------------//
function AUTO.error( $title, $list ) {
//--- エラー記録ファイルのオープン ---//
$fName = list.getNth( AUTO.getSetName(), 2 );
$fName = str.join( list.delLast( str.split( $fName, "." )), "." );
$fName = str.join( [$fName, ".ERR"], "" );
$id = file.open( $fName, "", 1 );
file.seek( $id, 0, 2 );
//--- 見出し部分の出力 ---//
$date = time.getDate();
$str = data.toString( list.get1st( $date ));
$str = str.join([$str,data.toString2(list.getNth($date,2),2,"0",0)], "/" );
$str = str.join([$str,data.toString2(list.getNth($date,3),2,"0",0)], "/" );
$str = str.join([$str,data.toString2(list.getNth($date,4),2,"0",0)], " " );
$str = str.join([$str,data.toString2(list.getNth($date,5),2,"0",0)], ":" );
$str = str.join([$str,data.toString2(list.getNth($date,6),2,"0",0)], ":" );
file.putString( $id, $str );
file.putString( $id, " " );
file.putString( $id, $title );
file.putString( $id, "\n" );
//test.print( $str );
//test.print( " " );
//test.print( $title );
//test.print( "\n" );
//--- メッセージを一行毎出力 ---//
foreach( $a, $list ) {
file.putString( $id, " " );
file.putString( $id, $a );
file.putString( $id, "\n" );
//test.print( " " );
//test.print( $a );
//test.print( "\n" );
}
file.putString( $id, "\n" );
file.close( $id );
AUTO.setErrorFlg( #TRUE );
return;
}
//--------------------------------------//
//--- 通信中の致命的エラーの処理 ---//
//--------------------------------------//
function AUTO.fatalError() {
$list = $$ERROR;
$errMsg = [];
list.putLast( $errMsg, list.getNth( $list, 3 ));
foreach( $a, list.getNth( $list, 4 )) {
list.putLast( $errMsg, $a );
}
$listSub = list.getNth( $list, 5 );
if( list.size( $listSub ) != 0 ) {
if( list.getNth( $listSub, 1 ) != "" ) {
list.putLast( $errMsg, str.join(["スクリプト名 :",
list.getNth( $listSub, 1 )], "" ));
}
list.putLast( $errMsg, str.join(["スクリプトファイル名:",
list.getNth( $listSub, 2 )], "" ));
list.putLast( $errMsg, str.join(["行 :",
data.toString( list.getNth( $listSub, 6 ))], ""));
}
AUTO.error("致命的エラー", $errMsg );
return;
}
//----------------------------------//
//--- エラーイベントハンドラ ---//
//----------------------------------//
event @ERROR {
if( $ComFlg == #TRUE ) {
AUTO.fatalError();
event.mainLoop();
}
local.errorFunc();
event.mainLoop();
}
//------------------------//
//--- ファイル送信 ---//
//------------------------//
function AUTO.sendFile( $list, $mode ) {
$path = str.join([$$DIR.STANDARD, "AUTO\\SCRIPT\\SENDFTSR.MX"], "" );
$mxList = script.status( #EXTERN, 1 );
$flg = #FALSE;
foreach( $a, $mxList ) {
if( $a == $path ) {
$flg = #TRUE;
exit;
}
}
if( $flg == #FALSE ) {
script.openExtern( $path, #FALSE, [] );
}
$ret = AUTO.sendFileTSR( $list, $mode );
AUTO.haltCheck();
return( $ret );
}
//---------------------------------//
//--- WAIT キャラクタの設定 ---//
//---------------------------------//
function AUTO.setWaitChar() {
//--- 19200bps 時の 15 秒間分のウェイトキャラクタ(300個) ---//
$waitChar = "\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w"
"\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w"
"\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w"
"\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w"
"\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w"
"\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w"
"\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w"
"\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w"
"\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w"
"\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w\w";
//--- 15 秒間のウェイトキャラクタの個数を計算 ---//
$num = 1500 / ( 8000 / (( $$COM.BAUD * 10 ) / 120 ));
//--- 15 秒、及び 30 秒間のウェイトキャラクタ作成 ---//
$AUTO.WAIT15 = str.left( $waitChar, $num );
$AUTO.WAIT30 = str.join( [$AUTO.WAIT15, $AUTO.WAIT15], "" );
$AUTO.WAIT60 = str.join( [$AUTO.WAIT30, $AUTO.WAIT30], "" );
return;
}
//---------------------------------//
//--- WAIT キャラクタの取得 ---//
//---------------------------------//
function AUTO.getWaitChar( $num ) {
if( $num == 15 ) {
return( $AUTO.WAIT15 );
} elif( $num == 30 ) {
return( $AUTO.WAIT30 );
} else {
return( $AUTO.WAIT60 );
}
}
//--------------------------------------//
//--- デフォルト情報リストの設定 ---//
//--------------------------------------//
function AUTO.setDefaultData(
$list ) // デフォルト情報リスト
{
$AutoDefaultData = data.copy( $list );
return;
}
//--------------------------------------//
//--- デフォルト情報リストの取得 ---//
//--------------------------------------//
function AUTO.getDefaultData()
{
return( $AutoDefaultData );
}
//------------------------------------------//
//--- フォーラム登録可能最大数の取得 ---//
//------------------------------------------//
function AUTO.getForumMax()
{
return( $AutoForumMax );
}
!!ENDBLOCK